home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / Ant Movie Catalog 3.5.0.2 / amc_install.exe / {app} / Scripts / FilmAffinity (ES).ifs < prev    next >
Text File  |  2005-05-21  |  10KB  |  333 lines

  1. (***************************************************
  2.  
  3. Ant Movie Catalog importation script
  4. www.antp.be/software/moviecatalog/
  5.  
  6. [Infos]
  7. Authors=aviloria  (aviloria@yahoo.com)
  8. Title=FilmAffinity (ES)
  9. Description=Movie importation script for FilmAffinity Spain
  10. Site=http://www.filmaffinity.com
  11. Language=ES
  12. Version=1.2
  13. Requires=3.5.0
  14. Comments=Updated to the new beta version of the page | Previous version is unsupported.
  15. License=The source code of the script can be used in another program only if full credits to script author and a link to Ant Movie Catalog website are given in the About box or in the documentation of the program.|
  16. GetInfo=1
  17.  
  18. [Options]
  19.  
  20. ***************************************************)
  21.  
  22. program FilmAffinity;
  23.  
  24. const
  25.   SearchBaseURL = 'http://new.filmaffinity.com/es/res.php?stext=';
  26.   SearchPostFix = '&stype=tit';
  27.   BaseURL1 = 'http://new.filmaffinity.com';
  28.  
  29. var
  30.   MovieName: string;
  31.   MovieURL: string;
  32. //------------------------------------------------------------------------------------
  33.  
  34. function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
  35. var
  36.   i: Integer;
  37. begin
  38.   Result := -1;
  39.   if StartAt < 0 then
  40.     StartAt := 0;
  41.   for i := StartAt to List.Count-1 do
  42.     if Pos(Pattern, List.GetString(i)) <> 0 then
  43.     begin
  44.       Result := i;
  45.       Break;
  46.     end;
  47. end;
  48. //------------------------------------------------------------------------------------
  49.  
  50. function TextBetween(var S: string; StartTag: string; EndTag: string): string;
  51. var
  52.   InitialPos: Integer;
  53. begin
  54.   InitialPos := Pos(StartTag, S);
  55.   if InitialPos = 0 then
  56.     result = ''
  57.   else
  58.   begin
  59.     Delete(S, 1, InitialPos + Length(StartTag) - 1);
  60.     InitialPos := Pos(EndTag, S);
  61.     if InitialPos = 0 then
  62.       result := S
  63.     else
  64.     begin
  65.       result := copy(S, 1, InitialPos - 1);
  66.       Delete(S, 1, InitialPos + 1);
  67.     end;
  68.   end;
  69. end;
  70. //------------------------------------------------------------------------------------
  71.  
  72. procedure AnalyzePage(Address: string);
  73. var
  74.   Page: TStringList;
  75.   LineNr: Integer;
  76.   Line: string;
  77.   Count: Integer;
  78.   MovieTitle, MovieAddress: string;
  79.  
  80. begin
  81.   Page := TStringList.Create;
  82.   Page.Text := GetPage(Address);
  83.   if Pos('<title>Busqueda de "', Page.Text) = 0 then
  84.   begin
  85.     ShowMessage('No se ha podido establecer la conexion.');
  86.   end else
  87.   begin
  88.     LineNr := FindLine('resultados.</b></td></tr>', Page, 0);
  89.     Line := Page.GetString(LineNr);
  90.     Count := StrToInt(TextBetween (Line, '<b>', ' resultados.</b>'), 0);
  91.     if Count = 0 then
  92.     begin
  93.       ShowMessage('No se han encontrado resultados para "' + MovieName + '"');
  94.     end else
  95.     begin
  96.       PickTreeClear;
  97.       PickTreeAdd('Encontrados ' + IntToStr(Count) + ' resultados para "' + MovieName + '"', '');
  98.  
  99.       LineNr := LineNr + 7;
  100.       Line := Page.GetString(LineNr);
  101.       repeat
  102.         MovieTitle := TextBetween (Line, '.html">', '</a>');
  103.         HTMLDecode(MovieTitle);
  104.         Line := Page.GetString(LineNr);
  105.         MovieAddress := TextBetween (Line, '<b><a href="', '">');
  106.         PickTreeAdd(MovieTitle, BaseURL1 + MovieAddress);
  107.         LineNr := LineNr + 10;
  108.         Line := Page.GetString(LineNr);
  109.       until Pos('</table>', Line) > 0;
  110.  
  111.       if PickTreeExec(Address) then
  112.         AnalyzeMoviePage(Address);
  113.     end;
  114.   end;
  115.   Page.Free;
  116. end;
  117. //------------------------------------------------------------------------------------
  118.  
  119. procedure AnalyzeMoviePage(Address: string);
  120. var
  121.   Page: TStringList;
  122.   LineNr, aux: Integer;
  123.   Line: string;
  124.   Item: string;
  125.   Comments: string;
  126.   Actors: string;
  127.   Directors: string;
  128.  
  129. begin
  130.   Comments := '';
  131.   Actors := '';
  132.  
  133.   // URL
  134.   SetField(fieldURL, Address);
  135.  
  136.   Page := TStringList.Create;
  137.   Page.Text := GetPage(Address);
  138.  
  139.   // Translated Title
  140.   LineNr := FindLine('<div style="margin-bottom: 4; padding:1; text-align: left; border-bottom: 1px solid #990000;"><span style="color:#990000; font-size:16; font-weight: bold;">', Page, 0);
  141.   Line := Page.GetString(LineNr);
  142.   Item := TextBetween (Line, ' border="0"> ', '</span>');
  143.   HTMLDecode(Item);
  144.   SetField(fieldTranslatedTitle, Trim (Item));
  145.  
  146.   // Original Title
  147.   LineNr := FindLine('TITULO ORIGINAL', Page, 0);
  148.   if LineNr <> -1 then
  149.   begin
  150.     Line := Page.GetString(LineNr + 1);
  151.     Item := TextBetween (Line, '<td ><b>', '</b></td>');
  152.     HTMLDecode(Item);
  153.     SetField(fieldOriginalTitle, Trim (Item));
  154.   end;
  155.  
  156.   // Picture
  157.   LineNr := FindLine('owned by Studio', Page, 0);
  158.   if LineNr <> -1 then
  159.   begin
  160.     Line := Page.GetString(LineNr);
  161.     Item := TextBetween (Line, '<img src="', '">');
  162.     if Pos (BaseURL1, Item) <> 0 then
  163.       Item := TextBetween (Item, BaseURL1, '"');
  164.     GetPicture (BaseURL1 + Item);
  165.   end;
  166.  
  167.   // Year
  168.   LineNr := FindLine('AÑO', Page, 0);
  169.   if LineNr <> -1 then
  170.   begin
  171.     Line := Page.GetString(LineNr + 1);
  172.     Item := TextBetween (Line, '<td >', '</td>');
  173.     HTMLDecode(Item);
  174.     SetField(fieldYear, Trim (Item));
  175.   end;
  176.  
  177.   // Length
  178.   LineNr := FindLine('DURACIÓN', Page, 0);
  179.   if LineNr <> -1 then
  180.   begin
  181.     Line := Page.GetString(LineNr + 1);
  182.     Item := TextBetween (Line, '<td >', ' min.</td>');
  183.     HTMLDecode(Item);
  184.     SetField(fieldLength, Trim (Item));
  185.   end;
  186.  
  187.   // Country
  188.   LineNr := FindLine('PAÍS', Page, 0);
  189.   if LineNr <> -1 then
  190.   begin
  191.     Line := Page.GetString(LineNr + 1);
  192.     Item := TextBetween (Line, 'alt="', '" border');
  193.     HTMLDecode(Item);
  194.     SetField(fieldCountry, Trim (Item));
  195.   end;
  196.  
  197.   // Director
  198.   LineNr := FindLine('DIRECTOR', Page, 0);
  199.   if LineNr <> -1 then
  200.   begin
  201.     Line := Page.GetString(LineNr + 1);
  202.     Directors := '';
  203.     while Pos ('stype=director', Line) > 0 do
  204.     begin
  205.       Item := TextBetween (Line, '">', '</a>');
  206.       HTMLDecode(Item);
  207.       if Directors = '' then
  208.         Directors := Item
  209.       else
  210.         Directors := Directors + ', ' + Item;
  211.     end;
  212.     SetField(fieldDirector, Trim (Directors));
  213.   end;
  214.  
  215.   // Script writer
  216.   LineNr := FindLine('GUIÓN', Page, 0);
  217.   if LineNr <> -1 then
  218.   begin
  219.     Line := Page.GetString(LineNr + 1);
  220.     Item := TextBetween (Line, '<td >', '</td>');
  221.     Comments := Comments + 'Guión: ' + Item + #13#10;
  222.   end;
  223.  
  224.   // Composer
  225.   LineNr := FindLine('MUSICA', Page, 0);
  226.   if LineNr <> -1 then
  227.   begin
  228.     Line := Page.GetString(LineNr + 1);
  229.     Item := TextBetween (Line, '<td  >', '</td>');
  230.     Comments := Comments + 'Música: ' + Item + #13#10;
  231.   end;
  232.  
  233.   // Photography
  234.   LineNr := FindLine('FOTOGRAFÍA', Page, 0);
  235.   if LineNr <> -1 then
  236.   begin
  237.     Line := Page.GetString(LineNr + 1);
  238.     Item := TextBetween (Line, '<td  >', '</td>');
  239.     Comments := Comments + 'Fotografía: ' + Item + #13#10;
  240.   end;
  241.  
  242.   // Actors
  243.   LineNr := FindLine('REPARTO', Page, 0);
  244.   if LineNr <> -1 then
  245.   begin
  246.     Line := Page.GetString(LineNr + 1);
  247.     Actors := TextBetween (Line, '">', '</a>') + #13#10;
  248.     while Pos ('stype=cast', Line) > 0 do
  249.       Actors := Actors + TextBetween (Line, '"> ', '</a>') + #13#10;
  250.     HTMLDecode(Actors);
  251.     SetField(fieldActors, Actors);
  252.   end;
  253.  
  254.   // Productor
  255.   LineNr := FindLine('PRODUCTORA', Page, 0);
  256.   if LineNr <> -1 then
  257.   begin
  258.     Line := Page.GetString(LineNr + 1);
  259.     Item := TextBetween (Line, '<td  >', '</td>');
  260.     HTMLDecode(Item);
  261.     SetField(fieldProducer, Trim (Item));
  262.   end;
  263.    
  264.   // Genere & Critic
  265.   LineNr := FindLine('GÉNERO Y CRÍTICA', Page, 0);
  266.   if LineNr <> -1 then
  267.   begin
  268.     Line := Page.GetString(LineNr + 1);
  269.     HTMLDecode(Line);
  270.     Item := TextBetween (Line, '<td  >', '</td>');
  271.     if Pos (' / ', Item) <> 0 then
  272.     begin
  273.       Line := Item;
  274.       Item := Copy (Item, 1, Pos (' / ', Item));
  275.       Line := TextBetween (Line, ' / ', '<br />');
  276.       if Pos (' / ', Line) <> 0 then
  277.       begin
  278.         Comments := Comments + Item + #13#10;
  279.         Item := Line;
  280.         Item := Copy (Item, 1, Pos (' / ', Item));
  281.         Line := TextBetween (Line, ' / ', '</td>');
  282.         SetField(fieldCategory, Trim(Item));
  283.         SetField(fieldDescription, Line);
  284.       end
  285.       else
  286.       begin
  287.         SetField(fieldCategory, Trim(Item));
  288.         SetField(fieldDescription, Line);
  289.       end
  290.     end
  291.     else
  292.       SetField(fieldCategory, Trim(Item));
  293.   end;
  294.  
  295.   // Official Webpage
  296.   LineNr := FindLine('WEB OFICIAL', Page, 0);
  297.   if LineNr <> -1 then
  298.   begin
  299.     Line := Page.GetString(LineNr + 1);
  300.     Comments := Comments + 'Web oficial: ' + TextBetween (Line, '<a href="', '" target="_blank">') + #13#10;
  301.   end;
  302.  
  303.   // Rating
  304.   LineNr := FindLine('<td align="center" style="color:#990000; font-size:22px; font-weight: bold;">', Page, 0);
  305.   if LineNr <> -1 then
  306.   begin
  307.     Line := Page.GetString(LineNr);
  308.     Item := TextBetween (Line, '<td align="center" style="color:#990000; font-size:22px; font-weight: bold;">', '</td>');
  309.     HTMLDecode(Item);
  310.     SetField(fieldRating, Item);
  311.   end;
  312.  
  313.   HTMLDecode(Comments);
  314.   SetField(fieldComments, Comments);
  315. end;
  316. //------------------------------------------------------------------------------------
  317. //------------------------------------------------------------------------------------
  318.  
  319. begin
  320.   if CheckVersion(3,5,0) then
  321.   begin
  322.     MovieName := GetField(fieldOriginalTitle);
  323.     if MovieName = '' then
  324.       MovieName := GetField(fieldTranslatedTitle);
  325.     if Input('Importar de FilmAffinity', 'Introduzca el titulo de la pelicula:', MovieName) then
  326.     begin
  327.       AnalyzePage(SearchBaseURL + UrlEncode(MovieName) + SearchPostfix);
  328.     end;
  329.   end
  330.   else
  331.     ShowMessage('Este script requiere una version mas reciente de Ant Movie Catalog (por lo menos la version 3.5.0)');
  332. end.
  333.